/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ManagedBeans;

import Geral.ErroInternoException;
import Geral.Fachada;
import Instrutor.Instrutor;
import Instrutor.InstrutorExistenteException;
import Instrutor.InstrutorInexistenteException;
import Usuario.Usuario;
import Usuario.UsuarioInexistenteException;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;

/**
 *
 * @author Ivaldo
 */
@ManagedBean
@SessionScoped
public class ManagedBeanInstrutor {
    
    @EJB
    private Fachada fachada;
    private Instrutor instrutor;
    private EntityManager em;
    private boolean login;
    
    public ManagedBeanInstrutor(){
        this.instrutor = new Instrutor();
    }
    
    public ManagedBeanInstrutor(Instrutor instrutor){
        this.instrutor = instrutor;
    }

    public Instrutor getInstrutor() {
        return instrutor;
    }

    public void setInstrutor(Instrutor instrutor) {
        this.instrutor = instrutor;
    }

    public boolean isLogin() {
        return login;
    }

    public void setLogin(boolean login) {
        this.login = login;
    }
    
    public String adicionarInstrutor(){
        try{
            this.fachada.adicionarInstrutor(this.instrutor);
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Cadastro realizado com sucesso");
            contexto.addMessage(null, msg);
            this.instrutor = new Instrutor();
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro Interno", "Ocorreu um erro interno inesperado" + e.getMessage());
            contexto.addMessage(null, msg);
        }catch(InstrutorExistenteException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Este Instrutor já foi cadastrado! " + e.getMessage());
            contexto.addMessage(null, msg);
        }catch(InstrutorInexistenteException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Instrutor Inexistente! " + e.getMessage());
            contexto.addMessage(null, msg);
        }
        return null;
    }
    
    public String removerInstrutor(){
        try{
            this.fachada.removerInstrutor(instrutor.getId());
            return "lista-html.xhtml";
        }catch(ErroInternoException e){
            return "ErroInterno.xhtml";
        }catch(InstrutorInexistenteException e){
            return "InstrutorInexistente.xhtml";
        }
    }
    
    public String buscarInstrutor(){
        try{
            this.fachada.buscarInstrutor(instrutor.getId());
            return "InformacoesInstrutor.xhtml";
        }catch(ErroInternoException e){
            return "ErroInterno.xhtml";
        }catch(InstrutorInexistenteException e){
            return "InstrutorInexistente.xhtml";
        }
    }
    
    public String atualizarSenhaInstrutor(){
        return "atualizarsenha-instrutor.xhtml";
    }
    
    public String senhaAtualizadaInstrutor(){
        try{
            this.fachada.atualizarInstrutor(instrutor);
            return "dadospessoais-instrutor.xhtml";
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Interno", "Ocorreu um erro inesperado");
            contexto.addMessage(null, msg);
            return null;
        }catch(InstrutorInexistenteException e){
            return null;
        }
    }
    
    public String atualizarInstrutor(){
        try{
            this.fachada.atualizarInstrutor(instrutor);
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Atualização concluida");
            contexto.addMessage(null, msg);
        }catch(ErroInternoException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Interno", "Ocorreu um erro inesperado");
            contexto.addMessage(null, msg);
            return null;
        }catch(InstrutorInexistenteException e){
            
        }
        return null;
    }
    
    public String loginInstrutor(){
        try{
            this.instrutor = this.fachada.loginInstrutor(instrutor.getLogin(), instrutor.getSenha());
            this.login = true;
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Cliente logado com sucesso");
            contexto.addMessage(null, msg);
            return "index.xhtml";
        }catch(ErroInternoException e){
          FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro Interno", "Ocorreu um errointerno inesperado! " + e.getMessage());
            contexto.addMessage(null, msg);
        }catch(InstrutorInexistenteException e){
            FacesContext contexto = FacesContext.getCurrentInstance();
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro Interno", "Ocorreu um errointerno inesperado! " + e.getMessage());
            contexto.addMessage(null, msg);
        }return null;
    }
    
    public void logout(){
        login = false;
        this.instrutor = new Instrutor();
    }
    
    public List<Instrutor> listaInstrutores() throws ErroInternoException{
        try{
            List<Instrutor> listaInstrutores = this.fachada.listaInstrutor(instrutor);
            return listaInstrutores;
        }catch(ErroInternoException e){
            throw new ErroInternoException(e);
        }
    }
}
